package com.zld;

import com.zld.config.ConfigTest;
import com.zld.pojo.User;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


/**
 * 描述：从默认的最简单的启动类开始
 *
 * @author lida
 * @time 2019/10/10 12:04
 */
public class MainApplication {
	/**
	 * Spring 中注册一个类的方法？
	 * 1. ac.register()   类
	 * 2. scan 配置一个扫描到   类
	 * 3.通过 ImportBeanDefinitionRegistrar 类向map中添加 BeanDefinition
	 *
	 * 提供类的话是无法参与类的 bd 的生成过程
	 * @MapperScan()的实现原理 MyBatis
	 * @param args
	 */

	public static void main(String[] args) {
		/**
		 * 注解配置的应用上下文
		 * 1.准备工厂 DefaultListableBeanFactory
		 * 实例化一个AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
		 */
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();

		/**
		 * 将一个class转化为beanDefinition，最后put到map中
		 * map就是 DefaultListableBeanFactory 中的 beanDefinitionMap
		 */
		applicationContext.register(ConfigTest.class);

		//初始化Spring环境
		applicationContext.refresh();

		User u = (User)applicationContext.getBean("user");
		u.query();
	}
}
